home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <string.h>
- #include <glib.h>
- #include <strlib.h>
-
- #include "land.h"
-
- #define MASK 0x40004000L
-
- int xpixel, ypixel, xypixel, goutcnt = 0;
-
- static int rnum(void)
- {
- static long rnd = 12345678L;
- rnd <<= 1;
- if ((rnd & MASK) == 0 || (rnd & MASK) == MASK) rnd++;
- return((int)rnd);
- }
-
- static int dith(int x, int y)
- {
- static char dztbl[4][4] = {
- { 0, 12, 2, 14},
- { 8, 4, 10, 7},
- { 3, 15, 1, 13},
- { 11, 6, 9, 5}
- };
- return((dztbl[x % 4][y % 4] * 256 + (rnum() & 0xff)) / 16);
- }
-
- void pixset(int x, int y, int col[])
- {
- int dx, dy;
- int ret, dot;
- unsigned gn, goffset;
-
-
- for (dy = 0; dy < ypixel; dy++) {
- for (dx = 0; dx < xpixel; dx++) {
- dot = 0x00;
- ret = dith(xpixel * x+ dx, ypixel * y + dy);
- if (ret < col[0]) dot |= 0x0a; /* 0x02 red +0x08 for intensity */
- if (ret < col[1]) dot |= 0x0c; /* 0x04 green +0x08 for intensity */
- if (ret < col[2]) dot |= 0x09; /* 0x01 blue +0x08 for intensity */
- GDS_pointColor(&GDS_data, dot);
- GDS_pointFirst(&GDS_data, xpixel * x + dx, ypixel * y + dy);
- /* pset(xpixel * x + dx, ypixel * y + dy, dot, PSET); */
- }
- }
- if ((goutcnt += xypixel) >= 32) {
- GDS_outputGraph(&GDS_data, &gn, &goffset);
- GDS_resetData(&GDS_data);
- goutcnt = 0;
- }
- }
-
- void dith2exec(int x, int y, int col)
- {
- if (col < 0) {
- line(x-2, y-2, x+33, y+18, PSET, col15, 1, 0xffff);
- line(x-1, y-1, x+32, y+17, PSET, col0, 2, 0xffff);
- msgset(x, y, "MENU", col15);
- } else {
- line(x-2, y-2, x+33, y+18, PSET, col, 1, 0xffff);
- line(x-1, y-1, x+32, y+17, PSET, col7, 2, 0xffff);
- msgset( x, y, "MENU", col);
- }
- }
-
- void dithmsg(int com, int sw)
- {
- char hmsg1[80], hmsg2[80];
- int col;
-
- hmsg1[0] = '\0'; hmsg2[0] = '\0';
-
- if (com == 7) {
- strcpy(hmsg1, "レベル、作業領域、\x095\x05c示開始点を設定してください。");
- /* 表 */
- strcpy(hmsg2, "設定は ○、数字の部分をそれぞれ指定してください。");
- }
-
- if (com == 8) {
- strcpy(hmsg1, "レベル、作業領域を設定してください。");
- strcpy(hmsg2, "設定は ○、数字の部分をそれぞれ指定してください。");
- }
-
- if (com == 10) {
- strcpy(hmsg1, "メイン・メニューにもどります。");
- }
-
- if (com == 21) {
- strcpy(hmsg1, "ライン開始点を設定してください。[ 1 ~ 201 ]");
- }
-
- if (com == 22) {
- strcpy(hmsg1, "ピクセル開始点を設定してください。[ 1 ~ 257 ]");
- }
-
- if (sw == 0) col = col7;
- else col = col0;
-
- msgset(96, 315, hmsg1, col);
- msgset(96, 335, hmsg2, col);
- }
-
- void dithbox(int x, int y, int col[], int coln)
- {
- int i, j, k;
- int x2, y2;
-
- if (coln == 5) {
- k = 8; x2 = x/2; y2 = y/2;
- } else {
- k = 16; x2 = x; y2 = y;
- }
- for(j = 0; j < k; j++) {
- for (i = 0; i < k; i++) pixset(x2+i, y2+j, col);
- }
- line(x-1, y-1, x+15, y+15, PSET, col0, 1, 0xffff);
- }
-
-
- void dithset(int coln, int th1[][2], int th2[][2], int th3[][2], int sw)
- {
- int i, col, cx, cy;
- char swk1[10], swk2[10], swk3[10];
- int cold[3];
-
- if (sw == 1) {
- line(90+1, 63+21, 350-1, 270-1, PSET, col7, 2, 0xffff);
- /* msgset( 80, 70, " カラーレベル、作業領域設定", col0); */
- msgset(100, 210, "○ ○ ○ 領域1", col0);
- msgset(100, 230, "○ ○ ○ 領域2", col0);
- msgset(100, 250, "○ ○ ○ 領域3", col0);
- }
- sprintf(swk1, "< %3d", th1[0][0]);
- symbol(118, 187+5, swk1, 1,1, col10, 0 ,PSET);
- symbol(198, 187+5, swk1, 1,1, col10, 0 ,PSET);
- symbol(278, 187+5, swk1, 1,1, col10, 0 ,PSET);
- for (i = 0; i < coln; i++) {
- if (i < coln-1) col = col0;
- else col = col10;
-
- sprintf(swk1, "< %3d", th1[i+1][0]);
- sprintf(swk2, "< %3d", th2[i+1][0]);
- sprintf(swk3, "< %3d", th3[i+1][0]);
- if (sw == 1) {
- cold[0] = 256*i/(coln-1); cold[1] = 0; cold[2] = 0;
- dithbox(100, 175+5-i*20, cold, coln);
- cold[0] = 0; cold[1] = 256*i/(coln-1), cold[2] = 0;
- dithbox(180, 175+5-i*20, cold, coln);
- cold[0] = 0; cold[1] = 0; cold[2] = 256*i/(coln-1);
- dithbox(260, 175+5-i*20, cold, coln);
- }
- cx = 120; cy = 167+5-i*20;
- line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 2, 0xffff);
- symbol(cx, cy, swk1, 1,1, col, 0 ,PSET);
- line(cx+79, cy-1, cx+125, cy+9, PSET, col7, 2, 0xffff);
- symbol(cx+80, cy, swk2, 1,1, col, 0 ,PSET);
- line(cx+159, cy-1, cx+205, cy+9, PSET, col7, 2, 0xffff);
- symbol(cx+160, cy, swk3, 1,1, col, 0 ,PSET);
- }
- }
-
- void dithchg(int cx, int cy, int coln, int th[][2], int th1[][2], int th2[][2], int th3[6][2],int leveln, int com)
- {
- int mosx = 360, mosy = 100, maxlv, minlv;
- char ws2[80];
- double wa = 0;
- int wi = 0, i;
-
- ws2[0] = '\0';
- while(1) {
- if (coln == 2) {
- maxlv = 255;
- minlv = 1;
- break;
- }
- if (leveln == 0) {
- maxlv = th[coln-1][0] - (coln-2);
- minlv = 1;
- break;
- }
- if (leveln == coln -2 ) {
- maxlv = 255;
- minlv = th[1][0] + (coln-2);
- break;
- }
- maxlv = th[leveln+2][0]-1;
- minlv = th[leveln][0]+1;
- break;
- }
- psmsgcls();
- sprintf(ws2, "レベル設定範囲 [%d~%d]", minlv, maxlv);
- pseudemsg2("レベルを設定してください。", ws2);
-
- if (calc( &mosx, &mosy, &wa) == 1) {
- wi = wa;
- if (wi < minlv) wi = minlv;
- if (wi > maxlv) wi = maxlv;
- while(1) {
- if (coln == 2) {
- th[0][1] = wi - 1;
- th[1][0] = wi;
- break;
- }
- if (leveln == 0) {
- th[1][0] = wi;
- th[0][1] = th[1][0] - 1;
- for (i = 2; i < coln-1; i++) {
- th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
- th[i-1][1] = th[i][0] - 1;
- }
- th[coln-2][1] = th[coln-1][0]-1;
- break;
- }
- if (leveln == coln -2 ) {
- th[coln-1][0] = wi;
- for (i = 2; i < coln-1; i++) {
- th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
- th[i-1][1] = th[i][0] - 1;
- }
- th[coln-2][1] = th[coln-1][0]-1;
- break;
- }
- th[leveln+1][0] = wi;
- th[leveln][1] = th[leveln+1][0] - 1;
- break;
- }
- dithset(coln, th1, th2, th3, 0);
- /* th level print for debug *
- Locate(0,0); Color(2);
- for (i = 0; i <= coln; i++) {
- printf("col= %d-%d %d-%d %d-%d \n", th1[i][0], th1[i][1], th2[i][0], th2[i][1], th3[i][0], th3[i][1]);
- }
- Color(7);
- * end for denug */
-
-
- }
- psmsgcls();
- return;
- }
-
- void wareaset( int warea[])
- {
- msgset(100, 210 + 20 * (warea[0]-1), "●", col0);
- msgset(180, 210 + 20 * (warea[1]-1), "●", col0);
- msgset(260, 210 + 20 * (warea[2]-1), "●", col0);
- }
-
- /* return( command ) */
- int dith2menu( int com)
- {
- unsigned ddadr[2];
- unsigned char page;
- char buf[30175]; /* (397*152+7)/8*4 */
- int x, y, x2, y2;
- int mx=0, my=0, time=0;
-
- x = 60; y = 65;
- page = 0;
- BSETDATAADR(ddadr, buf);
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+396, y+151);
-
- helpbox( x, y, x+390, y+120, "ディザカラー・メニュー");
- msgset(x, y+30, " ○ ポイント位置\x095\x05c示", col0);
- /* 表 */
- msgset(x, y+50, " ○ 拡大\x095\x05c示", col0);
- /* 表 */
- msgset(x, y+70, " ○ 三次元\x095\x05c示", col0);
- /* 表 */
- msgset(x+190, y+70, " ○ 終 了", col0);
- execmsg(x+350, y+95, col0);
-
- while (1) {
- if (time != 0) while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- else time = 1;
- if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 1) {
- execmsg(x+350, y+95, -1);
- while((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 0) {
- execmsg(x+350, y+95, col0);
- continue;
- } else {
- break;
- }
- }
- if (com == 1) { msgset(x+16, y+30, "●", col7); msgset(x+16, y+30, "○", col0); }
- if (com == 2) { msgset(x+16, y+50, "●", col7); msgset(x+16, y+50, "○", col0); }
- if (com == 3) { msgset(x+16, y+70, "●", col7); msgset(x+16, y+70, "○", col0); }
- if (com == -1) { msgset(x+16+190, y+70, "●", col7); msgset(x+16+190, y+70, "○", col0); }
- line(x+1, y+95, x+345, y+112, PSET, col7, 2, 0xffff);
- if(xychk16(mx, my, x+16, y+30) == 1) com = 1;
- if(xychk16(mx, my, x+16, y+50) == 1) com = 2;
- if(xychk16(mx, my, x+16, y+70) == 1) com = 3;
- if(xychk16(mx, my, x+16+190, y+70) == 1) com = -1;
- if (com == 1) {
- msgset(x+16, y+30, "●", col0);
- msgset(x+16, y+95, "カー\x083\x05cル位置\x095\x05c示をします。[5個所まで]", col0);
- /* ソ 表 */
- }
- if (com == 2) {
- msgset(x+16, y+50, "●", col0);
- msgset(x+16, y+95, "画像の拡大\x095\x05c示をします。[2~64倍まで]", col0);
- } /* 表 */
- if (com == 3) {
- msgset(x+16, y+70, "●", col0);
- msgset(x+16, y+95, "三次元画像\x095\x05c示をします。", col0);
- } /* 表 */
- if (com == -1) {
- msgset(x+16+190, y+70, "●", col0);
- msgset(x+16, y+95, "ディザカラー\x095\x05c示を終了します", col0);
- /* 表 */
- }
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- }
- GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+396, y+151, PSET);
- return(com);
- }
-
- void marunum(int num, int x, int y, int col)
- {
- char wstr[2];
-
- /* msgset(x-7, y-7, "○", col); */
- sprintf( wstr, "%1d", num);
- msgset2( x-3, y-3, wstr, col);
- }
-
-
- void pointset( int lin, int pixel)
- {
- unsigned char page;
- unsigned ddadr[2], numddadr[5][2];
- char buf[14212]; /* (128*222+7)/8*4 */
- char numbuf[5][204]; /* (20*20+7)/8*4 */
- int mx, my, mosx=350, mosy=100;
- int mex=512, mey= 30; /* sub menu */
- int i, loc[5][3];
- char wstr[32];
- int cuflag = 0;
-
- BSETDATAADR(ddadr, buf); /* address set */
- for (i=0; i<5; i++) {
- BSETDATAADR(numddadr[i], numbuf[i]); /* address set */
- }
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+221);
- helpbox( mex, mey, mex+120, mey+200, "ポイント位置\x095\x05c示");
- /* 表 */
- msgset( mex+5, mey+30, "クリックで", col0);
- msgset( mex+5, mey+50, "\x095\x05c示位置確定", col0);
- /* 表 */
- mousemsg( mex+80, mey+95, "終了", col0);
- msgset2( mex+30, mey+125, "ライン - ピクセル", col0);
-
- for (i=0; i<5; i++) {
- sprintf(wstr, "%1d)", i+1);
- msgset2( mex+2, mey+135+10*i, wstr, col0);
- loc[i][0] = 0;
- }
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0) {
- if (xychk(mx, my, 0, 0, 511, 399) == 1) {
- if (cuflag == 0) { cuflag = 1; mcu4(); }
- } else {
- if (cuflag != 0) { cuflag = 0; mcu1(); }
- }
- }
- if (xychk(mx, my, mex+80, mey+95, mex+80+32, mey+95+16) == 1) {
- mousemsg( mex+80, mey+95, "終了", -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, mex+80, mey+95, mex+80+32, mey+95+16) == 1) {
- break;
- }
- mousemsg( mex+80, mey+95, "終了", col0);
- }
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
- if (xychk(mx, my, 0, 0, 511, 399) == 1) {
- for (i=0; i<5; i++) {
- if ((loc[i][0] != 0) && (xychk(mx, my, loc[i][1]-8, loc[i][2]-8, loc[i][1]+9, loc[i][2]+9) == 1)) {
- loc[i][0] = 0; /* set flag off */
- GDS_putBlock(numddadr[i][0], numddadr[i][1], page, loc[i][1]-5, loc[i][2]-5, loc[i][1]+6, loc[i][2]+6, PSET);
- line( mex+25, mey+135+10*i,mex+119, mey+144+10*i, PSET, col7, 2, 0xffff);
- break;
- }
- }
- if (i == 5) { /* if not clear set position */
- for (i=0; i<5; i++) {
- if (loc[i][0] == 0) {
- loc[i][0] = 1; /* set flag on */
- loc[i][1] = mx; loc[i][2] = my;
- GDS_getBlock(numddadr[i][0], numddadr[i][1], page, mx-5, my-5, mx+6, my+6);
- marunum(i+1, mx, my, col15);
- sprintf( wstr, "%4d - %4d", lin+my/ypixel, pixel+mx/xpixel);
- msgset2( mex+22, mey+135+10*i, wstr, col15);
- break;
- }
- }
- }
- }
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- }
- /*
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
-
- /* restore */
- for (i=0; i<5; i++) {
- if (loc[i][0] != 0) {
- GDS_putBlock(numddadr[i][0], numddadr[i][1], page, loc[i][1]-5, loc[i][2]-5, loc[i][1]+6, loc[i][2]+6, PSET);
- line( mex+22, mey+135+10*i,mex+119, mey+144+10*i, PSET, col7, 2, 0xffff);
- }
- }
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+221, PSET);
- }
-
- /* 裏画面表示 */
- void backexp(int mx, int my, int x1, int y1, int x2, int y2)
- {
- unsigned char page;
-
- if (xychk(mx, my, x1, y1, x2, y2) == 1) { /* 裏画面表示 */
- page = 1;
- GDS_displayPage(page);
- gout();
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- while (1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (xychk(mx, my, x1, y1, x2, y2) == 1) {
- page = 0;
- GDS_displayPage(page);
- gout();
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- break;
- }
- }
- }
- }
-
- void sizechg( int lin, int pixel)
- {
- char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4, (400*1+7)/8*4 */
- unsigned ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
- unsigned char page, sPage, dPage;
- unsigned ddadr[2];
- char buf[11012]; /* (128*172+7)/8*4 */
- unsigned pddadr[2];
- char pbuf[2052]; /* (64*64+7)/8*4 */
- int mx, my, mosx=350, mosy=100;
- int mex=512, mey= 30; /* sub menu */
- int siz=2, ret;
- char wstr[20];
- double wa;
- int bx=128, by=100, bx2, by2, xsiz=256, ysiz=200;
- int i, j, kx, ky, m, n;
-
- BSETDATAADR(ddadr1x, buf1x);
- BSETDATAADR(ddadr2x, buf2x);
- BSETDATAADR(ddadr1y, buf1y);
- BSETDATAADR(ddadr2y, buf2y);
-
- BSETDATAADR(ddadr, buf); /* address set */
- BSETDATAADR(pddadr, pbuf); /* point buf address set */
-
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171);
- helpbox( mex, mey, mex+120, mey+163, "拡大\x095\x05c示");
- /* 表 */
- msgset( mex+5, mey+30, "枠内ドラッグで", col0);
- msgset( mex+5, mey+50, "\x095\x05c示位置移動", col0);
- /* 表 */
- msgset( mex+5, mey+80, "\x095\x05c示倍率", col0);
- /* 表 */
- line(mex+72, mey+78, mex+72+32, mey+98, PSET, col12, 1, 0xffff);
- sprintf(wstr, "%3d", siz);
- msgset(mex+76, mey+80, wstr, col0);
- recogmsg(mex+30, mey+140, col0);
- mousemsg( mex+70, mey+140, "終了", col0);
-
- /* ボックス作成 */
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
-
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
- if (xychk( mx, my, mex+72, mey+78, mex+72+32, mey+98) == 1) { /* 拡大率 */
- if (calc( &mosx, &mosy, &wa) != 0) {
- siz=wa;
- if (siz < 2) siz = 2;
- else if (siz > 64) siz = 64;
- line(mex+72+1, mey+78+1, mex+72+32-1, mey+98-1, PSET, col7, 2, 0xffff);
- sprintf(wstr, "%3d", siz);
- msgset(mex+76, mey+80, wstr, col0);
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- xsiz = 512 / siz; ysiz = 400 / siz; bx = 256 - xsiz / 2; by = 200 - ysiz / 2;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- }
- continue;
- }
- if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
- MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
- MOS_vertical(my-by, 399-((by+ysiz-1)-my));
- mcu3();
- bx2 = bx; by2 = by;
- movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- bx = bx2; by = by2;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- mcu1();
- }
- if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
- mousemsg( mex+70, mey+140, "終了", -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
- break;
- }
- mousemsg( mex+70, mey+140, "終了", col0);
- }
- if (recogin2( mx, my, mex+30, mey+140, 0) == 1) { /* 実行 */
- /* 原画復帰 */
- page = 0;
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
-
- page = 1;
- GDS_writePage(page);
- gout();
- line(516, 54, 638, 74, PSET, col7, 2, 0xffff);
- sprintf( wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(516, 55, wstr, col0);
- sprintf( wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(516, 65, wstr, col0);
- line(0, 0, 511, 399, PSET, col0, 2, 0xffff);
- line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
- GDS_displayPage(page);
- gout();
-
- /* 拡大表示 */
- ky = 0;
- for (j = by; j < by+ysiz; j++) {
- kx = 0;
- for (i = bx; i < bx+xsiz; i++) {
- /* GDS_getBlock(pddadr[0], pddadr[1], sPage, i, j, i, j); */
- sPage = 0; dPage = 1;
- for (m = 0; m < siz; m++) {
- GDS_copyBlock(sPage, i, j, i, j, dPage, kx+m, ky, PSET);
- /* GDS_putBlock(pddadr[0], pddadr[1], dPage, kx+m, ky, kx+m, ky, PSET); */
- }
- /* GDS_getBlock(pddadr[0], pddadr[1], dPage, kx, ky, kx+siz-1, ky); */
- sPage = 1; dPage = 1;
- for (n = 1; n < siz; n++) {
- GDS_copyBlock(sPage, kx, ky, kx+siz-1, ky, dPage, kx, ky+n, PSET);
- /* GDS_putBlock(pddadr[0], pddadr[1], dPage, kx, ky+n, kx+siz-1, ky+n, PSET); */
- }
- kx += siz;
- }
- ky += siz;
- }
- /* 拡大表示終了 */
- recogmsg( 526, 355, col0);
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (recogin2( mx, my, 526, 355, 0) == 1) {
- line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
- page = 0;
- GDS_writePage(page);
- GDS_displayPage(page);
- gout();
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- break;
- }
- }
- recogmsg(mex+30, mey+140, col0);
- }
- /* 裏画面表示 */
- backexp(mx, my, 630, 0, 639, 20);
- continue;
- }
- /*
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
-
- /* ボックスの消去 */
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- /* メニューの消去 */
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171, PSET);
- }
-
- void gr3dbox(int bx, int by, int xsiz, int ysiz, int angle)
- {
- if (angle == 0) { /* 見る方向の決定 右下 */
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(bx+xsiz-10, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET, col10, 0, 0xffff);
- line(bx+xsiz-1, by+ysiz-10, bx+xsiz-1, by+ysiz-1, PSET, col10, 0, 0xffff);
- return;
- }
- if (angle == 1) { /* 見る方向の決定 右上 */
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(bx+xsiz-10, by, bx+xsiz-1, by, PSET, col10, 0, 0xffff);
- line(bx+xsiz-1, by, bx+xsiz-1, by+10, PSET, col10, 0, 0xffff);
- return;
- }
- if (angle == 2) { /* 見る方向の決定 左上 */
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(bx, by, bx+10, by, PSET, col10, 0, 0xffff);
- line(bx, by, bx, by+10, PSET, col10, 0, 0xffff);
- return;
- }
- if (angle == 3) { /* 見る方向の決定 左下 */
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- line(bx, by+ysiz-1, bx+10, by+ysiz-1, PSET, col10, 0, 0xffff);
- line(bx, by+ysiz-10, bx, by+ysiz-1, PSET, col10, 0, 0xffff);
- return;
- }
- }
-
- void gr3dexe( int angle, int lin, int pixel, int bx, int by)
- {
- int i, j, k, m, n, p, q, max[512];
- char wstr[24];
- long ywid;
- unsigned char sPage, dPage;
- unsigned char huge *ptr;
-
- for (i = 0; i < 512; i++) max[i] = 400;
-
- if (angle == 0 || angle == 2) {
- line(40, 120, 40, 320, PSET, col9, 0, 0xffff);
- line(40, 320, 40+255, 320, PSET, col9, 0, 0xffff);
- line(40+255, 320, 40+255+180, 320-100, PSET, col9, 0, 0xffff);
- for (i = 0; i <= 255; i += 20) { /* ピクセル */
- if (angle == 0) {
- j = 40+i;
- } else {
- j = 40+255-i;
- }
- line( j, 320, j, 323, PSET, col9, 0, 0xffff);
- sprintf( wstr, "%3d", pixel+(bx+i)/xpixel);
- symbol( j+4, 325+8, wstr, 1,1, col14, 3 ,PSET);
- }
- if (angle == 0) line(40+255, 320, 40+255, 323, PSET, col9, 0, 0xffff);
- else line(40, 320, 40, 323, PSET, col9, 0, 0xffff);
- msgset2(150, 325+40, "[ピクセル]", col14);
- for (i = 0; i <= 100; i += 10) { /* レベル */
- line(40, 320-i*2, 37, 320-i*2, PSET, col9, 0, 0xffff);
- sprintf( wstr, "%3d", i);
- symbol( 40-30, 320-i*2-4, wstr, 1,1, col14, 0 ,PSET);
- }
- msgset2(10, 100, "[%]", col14);
- for (i = 0; i <= 200; i += 20) { /* ライン */
- j = i * 180L / 200L;
- k = i * 100L / 200L;
- line(40+255+j, 320-k, 40+255+j, 323-k, PSET, col9, 0, 0xffff);
- if (angle == 0) sprintf( wstr, "%-4d", lin+(by+200-i)/ypixel);
- else sprintf( wstr, "%-4d", lin+(by+i)/ypixel);
- symbol( 40+255+j-4, 325-k, wstr, 1,1, col14, 0 ,PSET);
- }
- msgset2(425, 280, "[ライン]", col14);
- }
- if (angle == 1 || angle == 3) {
- line(470, 120, 470, 320, PSET, col9, 0, 0xffff);
- line(470, 320, 470-255, 320, PSET, col9, 0, 0xffff);
- line(470-255, 320, 470-255-180, 320-100, PSET, col9, 0, 0xffff);
- for (i = 0; i <= 255; i += 20) { /* ビクセル */
- if (angle == 3) {
- j = 470-255+i;
- } else {
- j = 470 - i;
- }
- line(j, 320, j, 323, PSET, col9, 0, 0xffff);
- sprintf( wstr, "%3d", pixel+(bx+i)/xpixel);
- symbol( j+4, 325+8, wstr, 1,1, col14, 3 ,PSET);
- }
- if (angle == 3) line(470, 320, 470, 323, PSET, col9, 0, 0xffff);
- else line(470-255, 320, 470-255, 323, PSET, col9, 0, 0xffff);
- msgset2(350, 325+40, "[ピクセル]", col14);
- for (i = 0; i <= 100; i += 10) { /* レベル */
- line(470, 320-i*2, 473, 320-i*2, PSET, col9, 0, 0xffff);
- sprintf( wstr, "%3d", i);
- symbol( 470+5, 320-i*2-4, wstr, 1,1, col14, 0 ,PSET);
- }
- msgset2(480, 100, "[%]", col14);
- for (i = 0; i <= 200; i += 20) { /* ライン */
- j = i * 180L / 200L;
- k = i * 100L / 200L;
- line(470-255-j, 320-k, 470-255-j, 323-k, PSET, col9, 0, 0xffff);
- if (angle == 3) sprintf( wstr, "%4d", lin+(by+200-i)/ypixel);
- else sprintf( wstr, "%4d", lin+(by+i)/ypixel);
- symbol( 470-255-j-32+4, 325-k, wstr, 1,1, col14, 0 ,PSET);
- }
- msgset2(50, 280, "[ライン]", col14);
- }
- /* for debug */
- /*
- for (i=0; i<400; i++) {
- for (j=0; j < 512; j++) {
- if (angle == 0 || angle == 3) WAREA[(long)i * 512L + j] = (399-i) / 2;
- else WAREA[(long)i * 512L + j] = i / 2;
- }
- }
- */
- /* debug end */
- sPage = 0; dPage = 1;
- ywid = 512 / ypixel;
- if (angle == 0 || angle == 3) {
- for (i = 199; i >= 0; i--) {
- j = i * 180L / 200L;
- k = (199-i) * 100L / 200L;
- m = (i + by)/ypixel;
- ptr = WAREA+(long)m*ywid;
- for (n = bx; n < bx+256; n++) {
- if (angle == 0) p = 220 - j + n - bx;
- else p = 35 + j + n - bx;
- /* 470- 255 - (180 - j) + n - bx; */
- q = 320 - k - *(ptr+n/xpixel) * 200L /256L;
- if (max[p] > q) {
- GDS_copyBlock(sPage, n, i+by, n, i+by, dPage, p, q, OR);
- max[p] = q;
- }
- }
- }
- }
- if (angle == 1 || angle == 2) {
- for (i = 0; i < 200; i++) {
- j = i * 180L / 200L;
- k = i * 100L / 200L;
- m = (i + by)/ypixel;
- ptr = WAREA+(long)m*ywid;
- for (n = bx; n < bx+256; n++) {
- if (angle == 2) p = 295 + j - n + bx;
- else p = 470 - j - n + bx;
- q = 320 - k - *(ptr+n/xpixel) * 200L /256L;
- if (max[p] > q) {
- GDS_copyBlock(sPage, n, i+by, n, i+by, dPage, p, q, OR);
- max[p] = q;
- }
- }
- }
- }
- }
-
-
- void gr3d( int lin, int pixel)
- {
- char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4, (400*1+7)/8*4 */
- unsigned ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
- unsigned char page = 0, sPage, dPage;
- unsigned ddadr[2];
- char buf[11012]; /* (128*172+7)/8*4 */
- unsigned pddadr[2];
- char pbuf[2052]; /* (64*64+7)/8*4 */
- int mx, my, mosx=350, mosy=100;
- int mex=512, mey= 30; /* sub menu */
- int siz=2, ret;
- char wstr[20];
- double wa;
- int bx=128, by=100, bx2, by2, xsiz=256, ysiz=200;
- int i, j, kx, ky, m, n;
- int angle;
-
- BSETDATAADR(ddadr1x, buf1x);
- BSETDATAADR(ddadr2x, buf2x);
- BSETDATAADR(ddadr1y, buf1y);
- BSETDATAADR(ddadr2y, buf2y);
-
- BSETDATAADR(ddadr, buf); /* address set */
- BSETDATAADR(pddadr, pbuf); /* point buf address set */
-
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171);
- helpbox( mex, mey, mex+120, mey+163, "三次元\x095\x05c示");
- /* 表 */
- msgset( mex+5, mey+30, "枠内ドラッグで", col0);
- msgset( mex+5, mey+50, "\x095\x05c示位置移動", col0);
- /* 表 */
- msgset( mex+5, mey+70, "四隅クリックで", col0);
- msgset( mex+5, mey+90, "観測位置設定", col0);
- recogmsg(mex+30, mey+140, col0);
- mousemsg( mex+70, mey+140, "終了", col0);
-
- /* ボックス作成 */
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- angle = 0;
- gr3dbox(bx, by, xsiz, ysiz, angle);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
-
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
-
- if (xychk( mx, my, bx+xsiz-10, by+ysiz-10, bx+xsiz-1, by+ysiz-1) == 1) { /* 見る方向の決定 右下 */
- angle = 0;
- gr3dbox(bx, by, xsiz, ysiz, angle);
- continue;
- }
- if (xychk( mx, my, bx+xsiz-10, by, bx+xsiz-1, by+10) == 1) { /* 見る方向の決定 右上 */
- angle = 1;
- gr3dbox(bx, by, xsiz, ysiz, angle);
- continue;
- }
- if (xychk( mx, my, bx, by, bx+10, by+10) == 1) { /* 見る方向の決定 左上 */
- angle = 2;
- gr3dbox(bx, by, xsiz, ysiz, angle);
- continue;
- }
- if (xychk( mx, my, bx, by+ysiz-10, bx+10, by+ysiz-1) == 1) { /* 見る方向の決定 左下 */
- angle = 3;
- gr3dbox(bx, by, xsiz, ysiz, angle);
- continue;
- }
-
- if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
- MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
- MOS_vertical(my-by, 399-((by+ysiz-1)-my));
- mcu3();
- bx2 = bx; by2 = by;
- movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- bx = bx2; by = by2;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- gr3dbox(bx, by, xsiz, ysiz, angle);
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- mcu1();
- }
- if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
- mousemsg( mex+70, mey+140, "終了", -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, mex+70, mey+140, mex+70+32, mey+140+16) == 1) {
- break;
- }
- mousemsg( mex+70, mey+140, "終了", col0);
- }
- if (recogin2( mx, my, mex+30, mey+140, 0) == 1) { /* 実行 */
- /* 原画復帰 */
- page = 0;
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
-
- page = 1;
- GDS_writePage(page);
- gout();
- line(516, 54, 638, 74, PSET, col7, 2, 0xffff);
- sprintf( wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(516, 55, wstr, col0);
- sprintf( wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(516, 65, wstr, col0);
- line(0, 0, 511, 399, PSET, col0, 2, 0xffff);
- line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
- GDS_displayPage(page);
- gout();
-
- /* 三次元表示 */
- gr3dexe( angle, lin, pixel, bx, by);
- /* 三次元表示終了 */
-
- recogmsg( 526, 355, col0);
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (recogin2( mx, my, 526, 355, 0) == 1) {
- line(526-2, 355-2, 526+33, 355+18, PSET, col7, 2, 0xffff); /* 確認メッセージ消去 */
- page = 0;
- GDS_writePage(page);
- GDS_displayPage(page);
- gout();
- gr3dbox(bx, by, xsiz, ysiz, angle);
- break;
- }
- }
- recogmsg(mex+30, mey+140, col0);
- }
- /* 裏画面表示 */
- backexp(mx, my, 630, 0, 639, 20);
- continue;
- }
- /*
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
-
- /* ボックスの消去 */
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- /* メニューの消去 */
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171, PSET);
- }
-
-
- void dither2(int warea[], int coln, int th1[][2], int th2[][2], int th3[][2], int lin, int pixel)
- {
- int mx, my, mosx=400, mosy=100, com;
- int i, j, k, cx, cy, col, px, py;
- int cold[3], cvt1[256], cvt2[256], cvt3[256];
- unsigned char page;
- char swk[80], swk1[80], swk2[80], swk3[80];
- char wname1[64], wname2[64], wname3[64];
- FILE *fp1, *fp2, *fp3;
- unsigned char headblk[2][512], wblk[6144], *blkp1, *blkp2, *blkp3; /* 512*3*4 */
- size_t bsize, bn;
- unsigned gn, goffset;
- unsigned char sPage, dPage;
- float kf, kf2;
- unsigned char huge *WPTR;
-
- sprintf(wname1, "%s\\warea%1d.lnd", workdir, warea[0]);
- sprintf(wname2, "%s\\warea%1d.lnd", workdir, warea[1]);
- sprintf(wname3, "%s\\warea%1d.lnd", workdir, warea[2]);
-
- page = 1;
- GDS_writePage(page);
- gout();
- Cls;
- GDS_displayPage(page);
- gout();
- page = 0;
- GDS_writePage(page);
- gout();
-
- Cls;
- helpbox2( 512, 0, 639, 399, "ディザカラー");
-
- sprintf(swk1, "<%3d", th1[0][0]);
- symbol(526, 175, swk1, 1,1, col10, 3 ,PSET);
- symbol(526, 245, swk1, 1,1, col10, 3 ,PSET);
- symbol(526, 315, swk1, 1,1, col10, 3 ,PSET);
- for (i = 0; i < coln; i++) {
- if (i < coln-1) col = col0;
- else col = col10;
-
- sprintf(swk1, "<%3d", th1[i+1][0]);
- sprintf(swk2, "<%3d", th2[i+1][0]);
- sprintf(swk3, "<%3d", th3[i+1][0]);
- cold[0] = 256*i/(coln-1); cold[1] = 0; cold[2] = 0;
- dithbox(524+i*20, 158, cold, coln);
- cold[0] = 0; cold[1] = 256*i/(coln-1), cold[2] = 0;
- dithbox(524+i*20, 228, cold, coln);
- cold[0] = 0; cold[1] = 0; cold[2] = 256*i/(coln-1);
- dithbox(524+i*20, 298, cold, coln);
- cx = 546+i*20; cy = 175;
- symbol(cx, cy, swk1, 1,1, col, 3 ,PSET);
- symbol(cx, cy+70, swk2, 1,1, col, 3 ,PSET);
- symbol(cx, cy+140, swk3, 1,1, col, 3 ,PSET);
- }
-
- /* work area open */
- if ((fp1 = fopen(wname1, "rb")) == NULL) {
- GDS_displayPage(page);
- gout();
- pseudeerr(warea[0]);
- return;
- }
- bsize = 512; bn = 1;
- if (fread( headblk[0], bsize, bn, fp1) != bn) {
- fclose(fp1); pseudeerr(warea[0]); return;
- }
- if (fread( headblk[1], bsize, bn, fp1) != bn) {
- fclose(fp1); pseudeerr(warea[0]); return;
- }
- sprintf(swk, "作業領域 %1d %1d %1d", warea[0], warea[1], warea[2]);
- msgset(516, 25, swk, col0);
- strmid(swk, headblk[0], 17, 15);
- msgset2(516, 45, swk, col0);
- if (coln == 5) { /* 1/4 mode */
- sprintf(swk, "L%3d-P%3d/", lin, pixel);
- msgset2(516, 55, swk, col0);
- sprintf(swk, "L%3d-P%3d", lin+199, pixel+255);
- msgset2(516, 65, swk, col0);
- } else {
- msgset2(516, 55, "L 1-P 1/", col0);
- msgset2(516, 65, "L400-P511", col0);
- }
-
- /*
- strmid(swk, headblk[0], 33, 15); band num
- msgset2(516, 65, swk, col0);
- */
-
- strmid(swk, headblk[1], 89, 7); /* date */
- msgset2(516, 75, swk, col0);
- strmid(swk, headblk[1], 97, 9); /* wrs seen sentor n */
- msgset2(516, 85, swk, col0);
- strmid(swk, headblk[1], 106, 7); /* -s */
- msgset2(516+16, 95, swk, col0);
- strmid(swk, headblk[1], 114, 9); /* wrs 表示 */
- msgset2(516, 105, swk, col0);
- /* strmid(swk, headblk[1], 176, 13); nasda landsat */
- /* msgset2(516, 105, swk, col0); */
- strmid(swk, headblk[1], 189, 15); /* seen id */
- msgset2(516, 115, swk, col0);
- strmid(swk, headblk[1], 209, 8); /* sensor name */
- msgset2(516, 125, swk, col0);
- msgset2(516, 135, "---------------", col0);
-
- GDS_displayPage(page);
- gout();
-
- /* */
- sprintf(swk, "Red %s", strmid(swk2, headblk[0], 33, 8));
- msgset2(516, 145, swk2, col10);
-
- if ((fp2 = fopen(wname2, "rb")) == NULL) {
- pseudeerr(warea[1]);
- fclose(fp1);
- return;
- }
- if ((fp3 = fopen(wname3, "rb")) == NULL) {
- pseudeerr(warea[1]);
- fclose(fp1); fclose(fp2);
- return;
- }
-
- bsize = 1024; bn = 1;
- if (fread( wblk, bsize, bn, fp2) != bn) {
- fclose(fp2); pseudeerr(warea[1]); return;
- }
- sprintf(swk, "Green %s", strmid(swk2, wblk, 33, 8));
- msgset2(516, 215, swk2, col12);
-
- if (fread( wblk, bsize, bn, fp3) != bn) {
- fclose(fp3); pseudeerr(warea[2]); return;
- }
- sprintf(swk, "Blue %s", strmid(swk2, wblk, 33, 8));
- msgset2(516, 285, swk2, col9);
-
- /* conv table */
- kf = 256. / coln;
- for (i = 0; i < coln; i++) {
- kf2 = 256. * i / coln;
- for (j = th1[i][0]; j <= th1[i][1]; j++) {
- cvt1[j] = kf * (j-th1[i][0]) / (th1[i][1] - th1[i][0] + 1) + kf2;
- }
- for (j = th2[i][0]; j <= th2[i][1]; j++) {
- cvt2[j] = kf * (j-th2[i][0]) / (th2[i][1] - th2[i][0] + 1) + kf2;
- }
- for (j = th3[i][0]; j <= th3[i][1]; j++) {
- cvt3[j] = kf * (j-th3[i][0]) / (th3[i][1] - th3[i][0] + 1) + kf2;
- }
- }
-
- /* draw start */
- if (coln == 2) { lin = 1; pixel = 1; }
- bsize = 512; bn = 4; /* 512*4 byte read */
- i = 400/ypixel; j = 512/xpixel;
- if (lin != 0) {
- fseek(fp1, (long)(512.*(lin-1)), SEEK_CUR);
- fseek(fp2, (long)(512.*(lin-1)), SEEK_CUR);
- fseek(fp3, (long)(512.*(lin-1)), SEEK_CUR);
- }
- GDS_drawMode(&GDS_data, PSET); /* draw mode set */
- WPTR = WAREA;
- for (py = 0; py < i; py+=4) {
- /* 512*4 byte */
- if ((fread( wblk, bsize, bn, fp1) != bn) || (fread( wblk+2048, bsize, bn, fp2) != bn) || (fread( wblk+4096, bsize, bn, fp3) != bn)) {
- fclose(fp1); fclose(fp2); fclose(fp3);
- pseudeerr(0); return;
- }
- for (k = 0; k < 4; k++) {
- blkp1 = wblk + 512*k + pixel - 1; blkp2 = blkp1 + 2048; blkp3 = blkp1 +4096;
- for (px = 0; px < j; px++) {
- (*WPTR) = (*blkp1 + *blkp2 + *blkp3) / 3; /* 3バンドの、強度の平均値 (1/3) */
- WPTR++;
- cold[0] = cvt1[ *(blkp1++) ];
- cold[1] = cvt2[ *(blkp2++) ];
- cold[2] = cvt3[ *(blkp3++) ];
- /* *(WPTR++) = (cold[0]+cold[1]+cold[2]) / 3; 3バンドの、強度の平均値 (1/3) */
- /* printf("pixset %d %d %d %d\n", px, cold[0], cold[1], cold[2]); for debug */
- pixset( px, py+k, cold);
- }
- }
- }
-
- sPage = 0; dPage = 1;
- GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
-
- com = 1;
- dith2exec(526, 355, col0);
- calcu(600, 355, 0);
- while (1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
- if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
- dith2exec(526, 355, -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
- if ((com = dith2menu( com)) == -1) break;
- if (com == 1) {
- pointset( lin, pixel);
- }
- if (com == 2) {
- sizechg( lin, pixel);
- }
-
- if (com == 3) {
- gr3d( lin, pixel);
- }
- }
- dith2exec(526, 355, col0);
- continue;
- }
- }
-
- /* tst prog
- fclose(fp1); fclose(fp2); fclose(fp3);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
- page = 1;
- GDS_writePage(page);
- gout();
- Cls;
- page = 0;
- GDS_writePage(page);
- gout();
- return;
- }
-
- void expstart(int lin, int pixel)
- {
- char swk[80];
-
- helpbox( 360, 200, 490, 270, "\x095\x05c示開始点設定");
- /* 表 */
- sprintf( swk, "%4d ライン", lin);
- msgset( 380, 230, swk , col0);
- sprintf( swk, "%4d ピクセル", pixel);
- msgset( 380, 250, swk , col0);
- }
-
- void dither()
- {
- int bcl[16];
- int exec, com, com2, com3;
- int mx, my, mosx=400, mosy=100;
- unsigned char page;
- int i, j, cx, cy, cx2, cy2, level, warea[3];
- int (*thw)[2];
- int coln, th1[6][2];
- int th2[6][2];
- int th3[6][2];
- int th21[6][2];
- int th22[6][2];
- int th23[6][2];
- int lin, pixel;
- char swk[24];
- double wa = 0;
-
- lin = 1; pixel = 1;
- warea[0] = 1; warea[1] = 2; warea[2] = 3;
- coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
- th1[0][0] = 0; th2[0][0] = 0; th3[0][0] = 0;
- for (i = 1; i <= 5; i++) {
- th1[i][0] = 256*i/5; th1[i-1][1] = th1[i][0] - 1;
- th2[i][0] = 256*i/5; th2[i-1][1] = th2[i][0] - 1;
- th3[i][0] = 256*i/5; th3[i-1][1] = th3[i][0] - 1;
- }
- th21[0][0] = 0; th21[0][1] = 127;
- th21[1][0] = 128; th21[1][1] = 255;
- th21[2][0] = 256;
- th22[0][0] = 0; th22[0][1] = 127;
- th22[1][0] = 128; th22[1][1] = 255;
- th22[2][0] = 256;
- th23[0][0] = 0; th23[0][1] = 127;
- th23[1][0] = 128; th23[1][1] = 255;
- th23[2][0] = 256;
-
- com = com2 = 7;
- com3 = 0;
-
- start:
-
- page = 1;
- GDS_displayPage(page);
- gout();
- page = 0;
- GDS_writePage(page);
- gout();
-
- Cls;
- mttl();
- bcl[0] = col1;
- paint(1,30, 1, col7, 1, bcl);
- menubox( 80, 40, 560, 280, "ディザカラー画像\x095\x05c示条件設定");
- /* 表 */
- helpbox( 80,290, 560, 360, "メッセージ");
- /* line(90, 63, 350, 278, PSET, col1, 1, 0xffff); */
- helpbox( 90, 63, 350, 270, "レベル、作業領域設定");
- if (coln == 5) dithset(coln, th1, th2, th3, 1);
- else dithset(coln, th21, th22, th23, 1);
- wareaset( warea);
- msgset(360, 70, " ○ 125色カラー", col0);
- msgset(360, 90, " ○ 8色カラー", col0);
- msgset(360,130, " ○ 終 了", col0);
- execmsg(480, 170, col0);
- if (coln != 2) expstart(lin, pixel);
- calcu(600, 30, 0);
- wabot(600, 60, 0);
-
- GDS_displayPage(page);
- gout();
- locate(0,0,COFF);
- MOS_disp(0);
- exec = 0;
-
- while(1) {
- if (com == 7) msgset(376, 70, "●", col0);
- if (com == 8) msgset(376, 90, "●", col0);
- if (com ==10) msgset(376,130, "●", col0);
- dithmsg(com, 1);
-
- if (exec == 1) {
- if (com == 10) return;
- if (coln == 5) dither2( warea, coln, th1, th2, th3, lin, pixel);
- else dither2( warea, coln, th21, th22, th23, lin, pixel);
- goto start;
- }
- start2:
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 30, &mosx, &mosy) == 1) continue;
- if (wabotchk(mx, my, 600, 60) == 1) continue;
-
- for (i = 0; i <= 2; i++) {
- for (j = 0; j <= 2; j++) {
- cx = 100 + 80 * i; cy = 210 + 20 * j;
- if (xychk16(mx, my, cx, cy) == 1) {
- if (warea[i] != j+1) {
- msgset(cx, 210 + 20 * (warea[i]-1), "●", col7);
- msgset(cx, 210 + 20 * (warea[i]-1), "○", col0);
- warea[i] = j + 1;
- msgset(cx, 210 + 20 * (warea[i]-1), "●", col0);
- }
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- goto start2;
- }
- }
- }
-
- for (level = 0; level < coln-1; level++) {
- cx = 120; cy = 167+5-20*level;
- if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) {
- com3 = 3; break;
- }
- cx = 200;
- if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) {
- com3 = 13; break;
- }
- cx = 280;
- if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) {
- com3 = 23; break;
- }
- }
-
- if (com3 == 3 || com3 == 13 || com3 == 23) {
- line(cx-1, cy-1, cx+45, cy+9, PSET, col14, 1, 0xffff);
- if (coln == 5) {
- if (com3 == 3) thw = th1;
- if (com3 == 13) thw = th2;
- if (com3 == 23) thw = th3;
- dithchg(cx, cy, coln, thw, th1, th2, th3, level, com3);
- } else {
- if (com3 == 3) thw = th21;
- if (com3 == 13) thw = th22;
- if (com3 == 23) thw = th23;
- dithchg(cx, cy, coln, thw, th21, th22, th23, level, com3);
- }
- line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 1, 0xffff);
- com3 = 0;
- continue;
- }
- if (xychk16(mx, my,376, 70) == 1) com = 7;
- if (xychk16(mx, my,376, 90) == 1) com = 8;
- if (xychk16(mx, my,376,130) == 1) com =10;
- if (xychk(mx, my,480,170, 480+33, 190+18) == 1) {
- execmsg(480, 170, -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my,480,170, 480+33, 170+18) == 1) {
- exec = 1;
- continue;
- } else {
- exec = 0;
- execmsg(480, 170, col0);
- continue;
- }
- }
- if ((xychk(mx, my,380-2,230-2, 380+33, 230+18) == 1) && com != 8) {
- line( 380-2,230-2, 380+33, 230+18, PSET, col14, 1, 0xffff);
- cx2 = 205; cy2 = 125;
- psmsgcls();
- dithmsg(21, 1);
- wa = lin;
- if (calc( &cx2, &cy2, &wa) == 1) {
- if (wa < 1 ) lin = 1;
- else if (wa > 201) lin = 201;
- else lin = wa;
- sprintf( swk, "%4d", lin);
- line( 380-2,230-2, 380+33, 230+18, PSET, col7, 2, 0xffff);
- msgset( 380, 230, swk , col0);
- } else {
- line( 380-2,230-2, 380+33, 230+18, PSET, col7, 1, 0xffff);
- }
- psmsgcls();
- }
- if ((xychk(mx, my,380-2,250-2, 380+33, 250+18) == 1) && com != 8) {
- line( 380-2,250-2, 380+33, 250+18, PSET, col14, 1, 0xffff);
- cx2 = 205; cy2 = 125;
- psmsgcls();
- dithmsg(22, 1);
- wa = pixel;
- if (calc( &cx2, &cy2, &wa) == 1) {
- if (wa < 1 ) pixel = 1;
- else if (wa > 257) pixel = 257;
- else pixel = wa;
- sprintf( swk, "%4d", pixel);
- line( 380-2,250-2, 380+33, 250+18, PSET, col7, 2, 0xffff);
- msgset( 380, 250, swk , col0);
- } else {
- line( 380-2,250-2, 380+33, 250+18, PSET, col7, 1, 0xffff);
- }
- psmsgcls();
- }
- if (com != com2) {
- if (com2 == 7) {
- msgset(376, 70, "●", col7); msgset(376, 70, "○", col0);
- if (com == 8) {
- line( 360,200, 490+10, 270+8, PSET, col7, 2, 0xffff);
- coln = 2; xpixel = 1; ypixel = 1; xypixel = xpixel * ypixel;
- dithset(coln, th21, th22, th23, 1);
- wareaset( warea);
- }
- }
- if (com2 == 8) {
- msgset(376, 90, "●", col7); msgset(376, 90, "○", col0);
- if (com == 7) {
- expstart(lin, pixel);
- coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
- dithset(coln, th1, th2, th3, 1);
- wareaset( warea);
- }
- }
- if (com2 == 10) {
- msgset(376,130, "●", col7); msgset(376,130, "○", col0);
- if ((com == 8) && (coln == 5)) {
- line( 360,200, 490+10, 270+8, PSET, col7, 2, 0xffff);
- coln = 2; xpixel = 1; ypixel = 1; xypixel = xpixel * ypixel;
- dithset(coln, th21, th22, th23, 1);
- wareaset( warea);
- }
- if ((com == 7) && (coln == 2)) {
- expstart(lin, pixel);
- coln = 5; xpixel = 2; ypixel = 2; xypixel = xpixel * ypixel;
- dithset(coln, th1, th2, th3, 1);
- wareaset( warea);
- }
- }
- psmsgcls();
- com2 = com;
- }
- }
- }
-
-
-